Data storage systems are arrangements of hardware and software that include storage processors coupled to arrays of non-volatile storage devices, such as magnetic disk drives, electronic flash drives, and/or optical drives. The storage processors service storage requests, arriving from host machines (“hosts”), which specify blocks, files or other data elements to be written, read, created, deleted, and so forth. Software running on the storage processors manages incoming storage requests and performs various data processing tasks to organize and secure the data elements stored on the non-volatile storage devices.
Some data storage systems employ data compression to improve storage efficiency. For example, a software program running on a storage processor may perform compression in the background, e.g., by reading data from disk, compressing the data, and writing the compressed data back to disk. To read data that has already been compressed, the program may work in the opposite direction, e.g., by fetching compressed data from disk, decompressing the data, and presenting the decompressed data to a requesting program.
As another example, software running on an I/O (Input/Output) stack of a storage processor may perform data compression inline with storage requests, such that incoming data are compressed prior to the first time they are written to disk. This arrangement helps to avoid over-commitment of storage resources by avoiding initial, uncompressed writes.